home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
United Public Domain Gold 2
/
United Public Domain Gold 2.iso
/
utilities
/
pu563.dms
/
pu563.adf
/
MultipleDemo
/
multipledemo.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-05-18
|
4KB
|
162 lines
/* Compile me to get full executable. */
#include "multipledemoc.c"
int done=0;
ULONG count;
UWORD Code;
struct Gadget *Gad;
struct IntuiMessage *imsg;
struct MsgPort *MyMsgPort;
struct WindowNode *WinNode;
struct WindowNode *WinNode2;
struct List WindowList;
int OpenNewWin(void)
{
struct WindowNode * WN;
WN=AllocMem(sizeof(struct WindowNode),MEMF_CLEAR);
if (WN !=NULL)
{
OpenWindowWinNodeWin( MyMsgPort, WN );
if (WN->Win==NULL)
{
FreeMem(WN,sizeof(struct WindowNode));
}
else
{
AddTail(&WindowList,(struct Node *)WN);
WN->Win->UserData=(void *)WN;
count=0;
WinNode2=(struct WindowNode *)WindowList.lh_Head;
while (WinNode2->ln_Succ != NULL)
{
count++;
GT_SetGadgetAttrs(WinNode2->WinGadgets[2],WinNode2->Win, NULL, GTNM_Number, count, TAG_DONE);
WinNode2=WinNode2->ln_Succ;
}
return(0);
}
}
return(1);
}
void CloseOneWin( struct WindowNode * WN)
{
Remove((struct Node *)WN);
CloseWindowWinNodeWin(WN);
FreeMem(WN,sizeof(struct WindowNode));
count=0;
WinNode2=(struct WindowNode *)WindowList.lh_Head;
while (WinNode2->ln_Succ != NULL)
{
count++;
GT_SetGadgetAttrs(WinNode2->WinGadgets[2],WinNode2->Win, NULL, GTNM_Number, count, TAG_DONE);
WinNode2=WinNode2->ln_Succ;
}
}
void ProcessMenuIDCMPCommonMenu( UWORD MenuNumber)
{
UWORD MenuNum;
UWORD ItemNumber;
struct MenuItem *item;
while ((MenuNumber != MENUNULL))
{
item = ItemAddress( CommonMenu, MenuNumber);
MenuNum = MENUNUM(MenuNumber);
ItemNumber = ITEMNUM(MenuNumber);
switch ( MenuNum )
{
case CommonMenu_Options :
switch ( ItemNumber )
{
case CommonMenu_Options_Item0 :
WinNode=(struct WindowNode *)WindowList.lh_Head;
while (WinNode->ln_Succ->ln_Succ != NULL)
{
CloseOneWin(WinNode);
WinNode=(struct WindowNode *)WindowList.lh_Head;
}
break;
case CommonMenu_Options_Item2 :
WinNode=(struct WindowNode *)WindowList.lh_Head;
while (WinNode->ln_Succ != NULL)
{
CloseOneWin(WinNode);
WinNode=(struct WindowNode *)WindowList.lh_Head;
}
break;
}
break;
}
MenuNumber = item->NextSelect;
}
}
void main(void)
{
ULONG class;
if (OpenLibs()==0)
{
NewList(&WindowList);
OpenDiskFonts();
if ((MyMsgPort=CreateMsgPort())!=0)
{
if (OpenNewWin()==0)
while(done==0)
{
Wait(1L << MyMsgPort->mp_SigBit);
imsg=GT_GetIMsg(MyMsgPort);
while (imsg != NULL )
{
class=imsg->Class;
Code=imsg->Code;
Gad=(struct Gadget *)imsg->IAddress;
WinNode = (struct WindowNode *)imsg->IDCMPWindow->UserData;
GT_ReplyIMsg(imsg);
switch ( class )
{
case IDCMP_GADGETUP :
switch ( Gad->GadgetID )
{
case CommonWin_Gad0 :
OpenNewWin();
break;
case CommonWin_Gad1 :
OpenNewWin();
OpenNewWin();
OpenNewWin();
OpenNewWin();
OpenNewWin();
break;
}
break;
case IDCMP_CLOSEWINDOW :
CloseOneWin(WinNode);
if (WindowList.lh_Head->ln_Succ==NULL)
done=1;
break;
case IDCMP_MENUPICK :
ProcessMenuIDCMPCommonMenu( Code );
if (WindowList.lh_Head->ln_Succ==NULL)
done=1;
break;
}
imsg=GT_GetIMsg(MyMsgPort);
}
}
else
printf("Cannot open window.\n");
if (CommonMenu != NULL)
FreeMenus(CommonMenu);
DeleteMsgPort(MyMsgPort);
}
else
printf("Cannot make message Port.\n");
CloseLibs();
}
else
printf("Cannot open libraries.\n");
}